// 时间格式化工具函数
/**
 * 根据传入的毫秒级时间戳和参数返回格式化后的时间字符串
 * @param {number} timestamp - 毫秒级时间戳
 * @param {Array<string>} typeArray - 时间部分数组，包含 'year', 'month', 'day', 'hour', 'minute', 'second'
 * @param {string} delimiter - 时间间隔符：- 或 /
 * @returns {string} 格式化后的时间字符串
 */
function formatTimeByParts(timestamp, typeArray = ['year', 'month', 'day'], delimiter = '-') {
  // 验证参数
  if (!timestamp || typeof timestamp !== 'number') {
    throw new Error('请传入有效的毫秒级时间戳');
  }
  
  // 验证typeArray
  if (!Array.isArray(typeArray) || typeArray.length === 0) {
    throw new Error('typeArray必须是非空数组');
  }
  
  // 验证时间部分类型
  const validTypes = ['year', 'month', 'day', 'hour', 'minute', 'second'];
  const invalidTypes = typeArray.filter(type => !validTypes.includes(type));
  if (invalidTypes.length > 0) {
    throw new Error(`时间部分类型必须是：${validTypes.join(', ')} 中的一个，无效类型：${invalidTypes.join(', ')}`);
  }
  
  // 验证间隔符
  if (delimiter !== '-' && delimiter !== '/') {
    throw new Error('时间间隔符必须是 - 或 /');
  }
  
  // 创建日期对象
  const date = new Date(timestamp);
  
  // 获取各个时间部分
  const timeParts = {
    year: date.getFullYear(),
    month: String(date.getMonth() + 1).padStart(2, '0'), // 月份从0开始，需要+1
    day: String(date.getDate()).padStart(2, '0'),
    hour: String(date.getHours()).padStart(2, '0'),
    minute: String(date.getMinutes()).padStart(2, '0'),
    second: String(date.getSeconds()).padStart(2, '0')
  };
  
  // 根据typeArray构建返回的时间字符串
  // 处理年月日部分
  const dateParts = typeArray.filter(type => ['year', 'month', 'day'].includes(type))
    .map(type => timeParts[type]);
    
  // 处理时分秒部分
  const timeComponents = typeArray.filter(type => ['hour', 'minute', 'second'].includes(type))
    .map(type => timeParts[type]);
  
  // 构建最终结果
  let result = '';
  
  // 添加日期部分
  if (dateParts.length > 0) {
    result = dateParts.join(delimiter);
  }
  
  // 添加时间部分（如果有）
  if (timeComponents.length > 0) {
    result = result ? `${result} ${timeComponents.join(':')}` : timeComponents.join(':');
  }
  
  return result;
}

/**
 * 将日期字符串转换为毫秒级时间戳
 * @param {string} dateString - 日期字符串
 * @returns {number} 毫秒级时间戳
 */
function getTimestamp(dateString) {
  if (!dateString) {
    return Date.now();
  }
  return new Date(dateString).getTime();
}

/**
 * 获取当前时间的毫秒级时间戳
 * @returns {number} 当前时间的毫秒级时间戳
 */
function getCurrentTimestamp() {
  return Date.now();
}

/**
 * 获取当前时间的格式化字符串
 * @param {Array<string>} typeArray - 时间部分数组
 * @param {string} delimiter - 时间间隔符
 * @returns {string} 格式化后的当前时间字符串
 */
function getCurrentTimeByParts(typeArray = ['year', 'month', 'day'], delimiter = '-') {
  return formatTimeByParts(Date.now(), typeArray, delimiter);
}

// 导出所有函数
export {
  formatTimeByParts,
  getTimestamp,
  getCurrentTimestamp,
  getCurrentTimeByParts
};